import router from './router'
import store from './store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// import { asyncRoutes } from '@/router'
NProgress.configure({ showSpinner: false })
/* 获取token放在路由守卫里面 */
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // console.log(to, 'toto')
  NProgress.start()
  // 获取token
  const token = store.getters.token
  if (token) {
    // 如果有token
    if (to.path === '/login') {
      // 如果有token还有登录页 则直接去首页
      NProgress.done()
      next('/')
    } else {
      if (!store.state.user.userInfo.userId) {
        const res = await store.dispatch('user/getUserInfo')
        const menus = res.roles.menus
        // 筛选路由 放行通过
        // 动态路由按需导出了 可以导入拿到
        /**
         * addRoutes - 动态添加路由
         * 语法
         *  addRoutes是个函数 参数是数组，数组里的每一项是个对象，对象的属性就是我们配置的路由信息规则(和之前路由配置一样)
         *  举例 [{path: '/xxx', component: yyy}, {path: '/zzz', component: aaa, name: ...}]
         * 固定语法
         *  在调用addRoutes后 要直接“回首掏”
         *  next({...to, replace: true})
         */
        // console.log('处理未来数据', res)
        // router.addRoutes(asyncRoutes)
        const otherRoutes = await store.dispatch('permission/filterRoutes', menus)
        router.addRoutes([...otherRoutes, { path: '*', redirect: '/404', hidden: true }])

        next({ ...to, replace: true })
        // 需要return 否则下面会继续执行 回首掏已经重新进入页面了
        return
      }
      // 直接放行
      next()
    }
  } else {
    // 如果没有token
    if (whiteList.includes(to.path)) {
      // 如果没有token去登录页和404 直接放行
      next()
    } else {
      // 直接去登录页
      NProgress.done()
      next('/login')
    }
  }
})
router.afterEach(() => {
  NProgress.done()
})
